# 函数式编程: 将 具体的函数 当成参数赋值的编程思想就是函数式编程
# map(函数, 列表): 将列表中的每个元素通过函数进行统一的加工处理
# 1. 简化后的函数
def func05(item):  # item = 7
    return item ** 2 + 10  # 7*7+10 = 59
def func06(item):
    return True if item > 9 else False
list02 = [7, 8, 9, 10, 11]
result10 = map(func05, list02)
print(list(result10))  # [59, 74, 91, 110, 131]
result11 = map(func06, list02)
print(list(result11))  # [False, False, False, True, True]
# 2. 匿名函数
result12 = map(lambda item: item ** 2 + 10, list02)
print(list(result12))
result13 = map(lambda item: True if item > 9 else False,list02)
print(list(result13))
print("=====================")
# filter(布尔函数, 列表):
# 布尔函数: 返回值是True或者False这种布尔类型数据的函数
# 调用一个布尔函数来遍历列表当中每一个元素,返回一个使布尔函数返回值为True列表
list01 = [1, 2, 3, 4, 5]
# 1. 完整的写法
# def func01(item):
#     if item > 3:
#         return True
#     return False
# def func02(item):
#     if item % 2 == 1:  # 奇数 -> True -> 留下
#         return True
#     return False  # 偶数 -> False -> 扔掉

# 2. 函数简写
def func01(item):
    return True if item > 3 else False
def func02(item):
    return True if item % 2 == 1 else False
result01 = filter(func01, list01)
print(list(result01))  # [4, 5]
result02 = filter(func02, list01)
print(list(result02))  # [1, 3, 5]

# 3. 使用匿名函数
result03 = filter(lambda item: True if item > 1 else False,list01)
print(list(result03))
result04 = filter(lambda item: True if item > 3 else False,list01)
print(list(result04))
res = filter(lambda item: True if item % 2 == 1 else False,list01)
print(list(res))



# 匿名函数
# lambda 参数: 返回值  注意：匿名函数的返回值不需要加return关键字
# lambda num01, num02: num01 + num02
# 下列调用方式不推荐
# my_add = lambda num01, num02: num01 + num02
# print(my_add(100, 200))  # num01 = 100, num02 = 200

# 常规函数
# def get_sum(num01, num02):
#     return num01 + num02
# print(get_sum(10, 20))  # num01 = 10, num02 = 20
